package pe.edu.upc.e41a.javasoft.jsf;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.el.ELContext;
import javax.el.ExpressionFactory;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.validator.LengthValidator;
import org.primefaces.component.inputtextarea.InputTextarea;
import org.primefaces.component.message.Message;
import org.primefaces.context.RequestContext;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.jsf.managedbean.RooJsfManagedBean;
import org.springframework.roo.addon.serializable.RooSerializable;
import pe.edu.upc.e41a.javasoft.domain.TipoPersona;
import pe.edu.upc.e41a.javasoft.domain.Usuario;
import pe.edu.upc.e41a.javasoft.service.TipoPersonaService;

@Configurable
@ManagedBean(name = "pruebaBean")
@SessionScoped
@RooSerializable
public class PruebaBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
	TipoPersonaService tipoPersonaService;

	private String name = "Prueba";// Nombre de la barra de título

	private TipoPersona tipoPersona;// instancia de la clase

	private List<TipoPersona> allTipoPersonas; // listado de tipo de personas

	private boolean dataVisible = true; // flag

	private List<String> columns; // lista de columnas dinamicas para la grilla

	private boolean createDialogVisible = false;// flag para activar ó
												// desactivar el panel de
												// creación (quité los paneles )

	private List<Usuario> selectedUsuarios;// lista de tipo de usuarios

	@PostConstruct
	// constructor del bean siempre debe existir un constructor en un bean
	public void init() {
		columns = new ArrayList<String>();
		columns.add("descripcion");
	}

	public String getName() {
		return name;
	}

	public List<String> getColumns() {
		return columns;
	}

	public List<TipoPersona> getAllTipoPersonas() {
		return allTipoPersonas;
	}

	public void setAllTipoPersonas(List<TipoPersona> allTipoPersonas) {
		this.allTipoPersonas = allTipoPersonas;
	}

	public String findAllTipoPersonas() {
		allTipoPersonas = tipoPersonaService.findAllTipoPersonas();
		System.out.println(allTipoPersonas.size());
		dataVisible = !allTipoPersonas.isEmpty();
		return null;
	}

	public boolean isDataVisible() {
		return dataVisible;

	}

	public void setDataVisible(boolean dataVisible) {
		this.dataVisible = dataVisible;
	}

	public TipoPersona getTipoPersona() {
		if (tipoPersona == null) {
			tipoPersona = new TipoPersona();
		}
		return tipoPersona;
	}

	public void setTipoPersona(TipoPersona tipoPersona) {
		this.tipoPersona = tipoPersona;
	}

	public List<Usuario> getSelectedUsuarios() {
		return selectedUsuarios;
	}

	public void setSelectedUsuarios(List<Usuario> selectedUsuarios) {
		if (selectedUsuarios != null) {
			tipoPersona.setUsuarios(new HashSet<Usuario>(selectedUsuarios));
		}
		this.selectedUsuarios = selectedUsuarios;
	}

	public String onEdit() {

		if (tipoPersona != null && tipoPersona.getUsuarios() != null) {
			selectedUsuarios = new ArrayList<Usuario>(tipoPersona.getUsuarios());
		}
		return null;
	}

	// Método que llama a la pagina prueba.xhtml
	public String displayList() {
		createDialogVisible = false;
		findAllTipoPersonas();
		return "prueba";
	}

	public void reset() {
		tipoPersona = null;
		selectedUsuarios = null;
		createDialogVisible = false;
	}

	public void handleDialogClose(CloseEvent event) {
		reset();
	}

}
